
@C1@c@b@_ Pixel Transformation

    Perform arbitrary 1-to-1 pixel transformations. The transformation
    can be applied to RGB separately or simultaneously and to the entire
    image or a rectangular region of it.

    The transformation is defined by three (representing RGB) XY plots,
    whose horizontal axes are the input pixel values and the vertical axes
    are the output pixel values.

@b Interaction
    A transformation is altered by dragging the movable control points
    shown as little squares on the transformation function plots.
    The four buttons on the top right corner of the panel control to
    which color channel the current transformation applies. Immediately
    below is a counter that controls the number of movable points on the
    transformation plots.
    
    Following buttons and shortcuts are available

@f  Invert
     Replace every pixel by its compliments, i.e., photo-inversion.

@f  Steps
     Primitive quantization by clustering pixels.

@f  Band 
     Set alternating clusters of pixels to black.

@f  Threshold
     Set the transformation to a 2-level step function.

@f  Upshift
     Shift the current component(s) up one bit. No check for overflow is made.

@f  Dnshift
     Shift the current component(s) down one bit.

@f  Reset
     Set the current transformation to null, i.e., output(x) = input(x);

@f  Gamma
     Gamma correction with allowable gamma range of 0.001 to 10.00.

@f  Brightness
     Brightness can be changed either by absolute value (p += delta) or by
     a percentage (p *= (1.0 + delta)). To switch, click the mouse on the
     text "brightness".

@f  Constrast
     Make dark pixel darker and bright pixels brighter

@f  Swap
     Swap two pixel values, e.g., black and white

@f  Replace
     Replace one pixel value with another

@f  Apply
     Perform the current transformation and display the resulting image.

@f  Undo
     Undo last transformation. Only one undo is allowed. 

@f  Done
     Exit color editing mode.

@b Math Expressions
     Arbitrary math expression can be entered by clicking on the MathExp
     button. The built-in parser recognizes +-*/ and ^ (or **) operators
     and some of the standard functions from libm.a.

     The math expression must be entered with x as the variable name,
     such as (x+1)^2/4 (or if you like, y = x^2). The parser will use the
     current x values ([0,1] inclusive) to evaluate the expression.

@f  built-in functions
@f       cos, sin, acos, asin, tan, atan, deg, rad
@f       sqrt, cbrt, abs, exp, log, log10

@s@b Note
    1. In choosing the target or new pixel values in Swap & Change,
       it is a good idea to use the Pixel-picking features of the
       color selection (CNTL + leftmouse) because pixels might not
       be what they appear to be (e.g., (1,0,0) and (0,0,0) look the
       same to the eye).

    2. The transformation is additive, i.e., the transformation always
       applies to the current image.
    
    3.  A bluish glass can be achieved by using a function that 
        shifts red and green intensities down 2bits, or simple use the blue
        intensities alone.  Similar tricks can be used to achieve greenish
        glass etc.
